import axios from "axios";
import {ElMessage} from "element-plus";
// 1. 创建 axios 实例（单例全局）
const http = axios.create({
    baseURL: import.meta.env.VITE_API_URL, // 后端接口基础地址
    timeout: 5000,                   // 请求超时时间
    withCredentials: true            // 允许携带 cookie（如需跨域传cookie需开启）
});

// 2. 请求拦截器：统一添加 Token 到请求头
http.interceptors.request.use(
    (config) => {
        const Token = sessionStorage.getItem("Token");
        console.log("sessionStorage 中的 Token:", Token); // 检查是否有值
        if (Token) {
            // 后端通常要求 `Bearer + Token` 格式（需与后端统一）
            config.headers.Authorization = `Bearer ${Token}`;
            console.log("请求头 Authorization:", config.headers.Authorization); // 检查格式是否为 Bearer + Token
        }
        console.log("请求配置:", config);
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 3. 响应拦截器：统一处理响应与错误
http.interceptors.response.use(
    (response) => {
        // 直接返回后端响应的业务数据（假设后端格式为 {code, message, data}）
        return response.data;
    },
    (error) => {
        let errorMsg = "网络请求异常，请稍后再试";

        if (error.response) {
            // 有响应但状态码非 2xx
            const { status, data } = error.response;
            if (status === 401) {
                errorMsg = "登录状态失效，请重新登录";
                sessionStorage.removeItem("token"); // 清除无效 Token
                window.dispatchEvent(new CustomEvent("showLoginModal")); // 触发登录弹窗
            } else if (data?.message) {
                errorMsg = data.message; // 后端自定义错误信息
            } else {
                errorMsg = `请求错误，状态码：${status}`;
            }
        } else if (error.request) {
            // 请求发送但无响应（如超时、网络断开）
            errorMsg = "请求超时，请检查网络连接";
        }

        ElMessage.error(errorMsg);
        return Promise.reject(error);
    }
);

export default http;